import java.util.Stack;

/**
 * 栈实现队列
 */

public class MyQueue {

    //建立两个栈
    private Stack<Integer> s1;
    private Stack<Integer> s2;

    //在构造方法中实例化两个栈
    public MyQueue(){
        s1 = new Stack<>();
        s2 = new Stack<>();
    }

    //入队, 把所有的元素统一放到第一个栈当中
    public void push(int x) {
        s1.push(x);
    }

    //因为是用栈模拟队列 所以pop的时候需要考虑先进先出的原理
    //在此基础上 我们就可以知道如果
    //第二个栈不为空 那么pop出去的绝对是第二个栈的栈顶元素
    //否则就要将所有的第一个栈的元素导入第二个栈
    public int pop() {
        //如果两个栈都为空 证明已全部pop
        if (empty()){
            return -1;
        }

        if (s2.empty()) {
            //将全部s1的元素导过来
            while(!s1.empty()) {
                s2.push(s1.pop());
            }
        }

        return s2.pop();
    }

    //栈顶元素
    public int peek() {
        if (empty()) {
            return -1;
        }
        if (s2.empty()) {
            while(!s1.empty()) {
                s2.push(s1.pop());
            }
        }
        return s2.peek();
    }

    public boolean empty() {
        return s1.empty() && s2.empty();
    }


}
